#include<bits/stdc++.h>
#define int long long 
#define Maxn 200005 
using namespace std;
//struct SGT {
//	#define lson x<<1,l,mid 
//	#define rson x<<1|1,mid+1,r 
//	int sgt[Maxn<<2];
//	void merge(int x,int l,int r,int u,int v,int w) {
//		if(u<=l&&r<=v)return sgt[x] += w,void();
//		int mid = (l+r)>>1; if(u <= mid)merge(lson,u,v,w); if(mid < v)merge(rson,u,v,w);
//		sgt[x] = min(sgt[x<<1],sgt[x<<1|1]);
//	} 
//	int query(int x,int l,int r,int u,int v) {
//		if(u<=l&&r<=v)return sgt[x];
//		if(u > v||l == r)return 0;
//		int mid = (l+r)>>1,ans = INT_MAX;
//		if(u <= mid)ans = min(ans,query(lson,u,v,w));
//		if(mid < v)ans = min(ans,query(rson,u,v,w));
//		return ans;
//	}
//	#undef lson 
//	#undef rson 
//} tre; 
struct node {
	int a,h;
	bool operator<(const node&is) 
	const {return a == is.a?h<is.h:a < is.a;}
} e[Maxn];
int f[Maxn];
void solve() {
	int n,flag = 0; cin>>n>>e[0].a;
	for(int i=1;i<=n;i++)
		cin>>e[i].a>>e[i].h;
	for(int i=1;i<n;i++)
		if(e[i].a <= e[i+1].a||e[i].h >= e[i+1].h)
			{flag = 1; break;}
//	if(!flag&&n > 1000) {
//		return cout<<ans,void();
//	}
	sort(e+1,e+1+n);
	for(int i=1;i<=n;i++) {
		f[i] = INT_MAX;
		for(int j=0;j<i;j++) {
			f[i] = min(f[i],f[j]+((e[i].h+e[j].a-1)/e[j].a-1)*e[i].a);
			f[j] = f[j] + ((e[i].h+e[n].a-1)/e[n].a-1)*e[i].a;
		}
	} 
	return cout<<f[n],void();
}
signed main()
{
	freopen("xinyue.in","r",stdin);
	freopen("xinyue.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	solve();
	return 0;
 } 
